package com.array;



/**
 * @className: com.array.ArrList
 * @description: 数组相关算法题型
 * @author: tong.li
 * @createTime: 2022/7/26 15:39
 * @copyright: Tongcheng-Elong Holdings Limited
 */
public class ArrList<T> {

    /**
     * 反转数组
     *  双指针解决
     * @param arr
     * @param <E>
     */
    public static <E>  void reverse(E[] arr) {
        if (arr == null) {
            return;
        }
        int len = arr.length;
        // 定义两个指针，分别指向首元素和尾元素
        // 循环遍历，当start < end交换，
        // 交换后，首指针往后移，尾指针往前移动，只到首尾指针相遇则结束
        /*
        for (int start = 0, end = len - 1; start < end; start++, end--) {
            E tmp = arr[start];
            arr[start] = arr[end];
            arr[end] = tmp;
        }
        */
        // 来自Collections.reverse()的思路,先把结束边界确认清楚,感觉源码中的mid多此一举
        for (int i = 0, mid = len >> 1, j = len - 1; i < mid; i++, j--) {
            E tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }










}
